package com.doitedu.core2

import com.doitedu.utils.SparkUtil

import scala.io.Source

/**
 * @Date: 22.7.2 
 * @Author: HANGGE
 * @qq: 598196583
 * @Tips: 学大数据 ,到多易教育
 * @Description:
 */
object C03_广播变量案例 {
  def main(args: Array[String]): Unit = {
    // 加载字典数据 城市数据 小  完全没必要使用spark加载
    val lines = Source.fromFile("data/join/city.txt").getLines()
    // 将城市信息  封装在集合中 Map
    // Map集合中存储的数据类型要序列化  case class
    // Object修饰
    val mp: Map[String, String] = lines.map(line => {
      val arr = line.split(",")
      (arr(0), arr(1))
    }).toMap

    // 用户信息 比较多  使用spark处理用户信息
    val sc = SparkUtil.getSparkContext("广播变量_map端聚合_分布式缓存")

    // 加载用户数据
    val rdd = sc.textFile("data/join/user.txt")

    // 将数据进行广播 只读
    val bc = sc.broadcast(mp)

    val resRDD = rdd.map(line => {
      // 获取广播数据
      val data = bc.value
      val arr = line.split(",")
      val city = data.getOrElse(arr(2), "未知")
      (arr(0), arr(1), arr(2), city)
    })
    resRDD.foreach(println)


    sc.stop()

  }

}
